Zade's Weblog

程序人生

单键模式的一种特殊实现

在设计模式中,单键模式是最简单的一种.我原来以为这种简单的模式使用的场景不会太多.但是实际经验告诉我,使用的非常多,几乎在我经手的每个项目中都使用了这个模式.

这个模式的具体实现有几种:

class Singleton{

private:

Singleton();

static Singleton inst;

public:

 static  Singleton& instance(){

return inst;

}

};

class Singleton{

private:

Singleton();

public:

 static  Singleton& instance(){

static Singleton inst;

return inst;

}

};

class Singleton{

private:

Singleton();

static Singleton *inst;

public:

 static  Singleton& instance(){

if(inst == NULL){

    inst = new Singleton();

}

return *inst;

}

};

 

可能还有其他的模式,不再枚举了.

这几种实现有一个共同的特点,即这个单件对象是被动创建的,或者在静态存储区,或者在堆上.为什么不由使用者主动创建呢?

当然,使用者可能主动创建多个,在这种情况下,我们可以采用一些方法避免这个.主动创建的好处是:使用者控制这个对象是创建在栈上还是堆上.例如:

class Singleton{

static Singleton *inst;

public:

Singleton(){

   if(inst != NULL){

std::cout << “can’t create more than once”;

abort();

    }

    inst = this;

}

 static  Singleton* instance(){

return  inst;

}

};

void func()

{

     Singleton::instance()->func();

}

int main(){

      Singleton myinst;

     func();

}

这样用存在一定的风险,但是也有好处.只要个把握住就好

谢谢爸爸和拉我起来

大约一个星期以前的一个周末,吃中午饭的时候,小妞妞坐在我的斜对面(有她专门的座椅),和我们一起吃饭.吃到一半的时候,小妞妞说:”我要喝水”. 水杯在她的对面,我正好顺手,就拿起来递给了她.她很清楚的对我说了一声:”谢谢爸爸”.

所谓天伦之乐,不过如此.

虽然小妞妞很早就会说话,但是说话的内容能够和说话的场景对应起来,我还是第一次明显的感觉到,毕竟小妞妞才20个月左右.我的惊讶甚至大于惊喜.

小孩儿每天都在成长,做父母最快乐的事情之一,就是看着孩子成长.

成长体现在许多琐碎的小事上,但是有些时候也会出现一些哭笑不得的事情.

如果有时间,我就会和小妞妞一起玩,小孩子天性爱玩嘛!有时候玩累了,我躺在床上就不原意动;但是小妞妞还精力旺盛.她一般会站在旁边对我说:”爸爸起来,爸爸起来”.

我把手伸给她说:”拉我起来”,小妞妞稚嫩的小手握着我的手向上一提,我就会像打了兴奋剂一样再和她疯玩一会.

小妞妞好像慢慢的掌握了规律,只要我说”拉我起来”,她一动作,我马上就起来了;而她说”爸爸起来”,我并一定会起来. 所以她更进一步,不再说”爸爸起来”(好像是她觉得这句话没有作用),而是直接替我说”拉我起来”(这句话的作用是立杆见投影的).

看来她还分不清楚主体和客体,”你我”的发音她会,但是概念的区别对于目前的她还不能够.

看来,小妞妞成长的路,”路漫漫其修远兮,吾将上下而求索”.

不好意思 害怕

有一天我下班回来的比较早,正好在楼前的运动场见到小妞妞,她姥姥领着她,和她年龄相仿的一群小朋友在玩耍.

见到我以后,姥姥指着我对她说:”爸爸回来了”.小妞妞看到了我,但是很奇怪的是,她躲在了姥姥的怀里不出来,一副非常害羞的样子,非常的可爱.

姥姥笑着对我说:”不好意思,小妞妞不好意思了”.自此以后,不好意思成为了妞妞的表现特征之一.

我奇怪的是,这个表现不是我们有意培养的,好像也不是天生的,就偶然间这样生成了.但是害怕的生成确是有原因的.

更小的时候,小妞妞的胆子是比较大的.在15个月左右的时候,她就敢两只手把在单杠上荡秋千.

后来有一次,有一家结婚放鞭炮的,声音比较大,小妞妞被吓到了,不停的说害怕.这个事件以后,范式类似的事件事情,她都会说害怕.感觉好像她的胆子变小了,以后应该鼓励她更勇敢一些.

 

关于excel表格可选择内容的定制

老婆使用一个excel表格管理家庭财务,开始的时候挺顺利的,后来遇到一个问题,可选择列的内容突然变少了;一直没有找到原因。最近老婆去了青岛,把这个任务交给了我。

我好不容易才找到答案,在这里做一个备份。http://wenku.baidu.com/view/ae822418227916888486d758.html

C++卷土重来

infomit的一篇文章:

http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=545&WT.rss_f=Guide&WT.rss_a=C%20%20%20is%20Back%20with%20a%20Vengeance%20&WT.rss_ev=a

作为一个C++的狂热爱好者,我当然爱听到这样的消息

还有一个C++的产品列表:

Apple’s Mac OS X, Adobe Illustrator, Facebook, Google’s Chrome browser, the Apache MapReduce clustered data-processing architecture, Microsoft Windows 7 and Internet Explorer, Firefox, and MySQL – to name just a handful – are written in part or in their entirety with C++.

小妞妞和三字经

在小妞妞还没有满月的时候,为了哄她睡觉,我把她拦在怀里,坐在一个大气球上(她妈早些时候练瑜伽用的),给她念三字经听.我当然不期望她能够理解,只是一种催眠她的手段罢了.

不过这个行为成了我的一个习惯,成为了哄她睡觉的一个必备手段.我也被迫几乎能够背完整篇的三字经.基本上每次在我背完三字经以前,她就睡着了,一般不超过15分钟.

三字经那种近乎古文的风格,别说是小妞妞,就是成年人要理解也不容易;好处是顺口而已.但是我从没有指望小妞妞能够在她上幼儿园之前学会一些.

前几天老婆突然激动的对我说,小妞妞会背三字经了,我开始以为她是咋开玩笑呢.但是当小妞妞那稚嫩的声音发确实能够背出三字经文字的时候,我的惊讶大于惊喜.内容不多,只有下面的80个字:

人之初,性本善.性相近,习相远.

苟不教,性乃迁.教之道,贵以专.

昔孟母,择邻处,子不学,断机杼.

窦燕山,有义方,教五子,名俱扬.

养不教,父之过,教不严,师之惰.

 

可以肯定的是,她绝对没有理解这些话的意思,但是她能够背诵下来,很明显是我这一年多来坚持的结果.幼教,还真是有它的效果呀.

我惊讶的另外一点是,小妞妞好像是一下子就会背了,之前她甚至不会第一句,好像醍醐灌顶一样.

一岁半,我可以肯定,这几乎是可以背诵三字经前80个字最小的年龄纪录了吗?

我为你骄傲,小妞妞!

HDFS的效率

HDFS整个使用java写的,通过一些其他的手段也可以跨语言访问,比如c(内部使用JNI实现的)

我曾经一度担心HDFS的效率,后来释然了,因为这里面的主要瓶颈肯定是在流数据的读写上,而不是语言造成的差异上.

这个可以通过以后的对hadoop的熟悉而逐渐的验证

小妞妞回头看-蹲着撒尿

老用尿布,老是捂着,小妞妞应该感觉不舒服;不用尿布,她撒尿很频繁,而且几乎每次都尿湿裤子.换裤子的时候她不配合,这在冬天的时候问题显得尤其严重.

昨天回家,小妞妞的姥姥告诉我,这一整天她一直学着蹲着撒尿,还没有尿湿过裤子呢.这真是一件值得纪念的事情.

但是晚节不保的是,晚上要给她洗澡的时候,裤子湿了,这刚刚距离上次检查她的裤子的时间间隔还不到5分钟;而且还不知道她在哪里撒了尿.

不关怎样,总归是进步了,值得表扬!

和小妞妞一起过年

有了小妞妞,一切和以往不同了,所有的活动要以她为中心.

春节我们是在北京过的,由于没有车,出门也不方便.老婆的计划是初二到颐和园,初三到动物园.这两个地方都离地铁不远,对于我们正是方便.

在颐和园里,小妞妞非常的配合,不仅在车上很乖,到了颐和园以后,也没有折腾.一般在下午2点她要午睡,由于我们到达那里的时候已经12点了,下午2点的时候她还很兴奋,没有睡觉的意思.吃了香蕉,吃了奶,在昆明湖前面的空旷地到处跑着玩.

后来她姥爷给她买了一个吹泡泡桶,成了小妞妞的最爱.要不是后来我们担心时间晚了她要睡觉.强制她回家,还不知道要玩到什么时候.

昨天到动物园那,天气有些冷,小妞妞对猴子最感兴趣,对其他的动物例如长颈鹿,鹦鹉等兴趣就非常的勉强了,甚至老虎的吼声还把她吓哭了.尤其是她吃了奶以后,莫名其妙的哭了一通,搞得我有些被动.

在这两天的活动中,基本上是我抱着她.小妞妞现在有超过20斤的重量,这不是一件很轻松的事情.尤其是在动物园回家的路上,她睡着了,我只能使用一个动作抱着她,直到回家,大约有15分钟的路程,双臂麻木的几乎失去了知觉.

不过这是小妞妞的第一次逛公园,她很高兴,老婆也比较开心,这就够了!

线程同步和日志

当主线程退出的时候,一般的逻辑是要所有的子线程join,这样以来不至于使得所有的子线程被强行的中断。
我现在的程序的逻辑是一旦主线程退出,我需要某种渠道告诉子线程,如果你处理完了所有的任务,那么你也退出吧。在所有的线程

退出以后,我还要通过日志记载资源释放的情况。
大体的代码架构如下:
main_thread()
{
run_when_recieve_term_signal;
send_term_tasks_to_all_sub_threads;
all_sub_threads_join;
}
sub_thread()
{
run_handle_tasks_when_receive_term_task;
exit_thread;
}
main_function()
{
//some other process
main_thread();
log_when_resources_are_released;
}
我现在遇到的问题是,一旦主程序退出,资源释放的日志并没有写入。问题在什么地方?
我简单的分析了一下,因为主线程向子线程发送结束任务的以后,然后再让所有的子线程join,但是这个时候可能子线程已经收到结

束任务的命令,并且已经退出,在这个卡当,会不会产生微妙的问题?因为资源释放的日志都是在主线程发出的。
所以我的策略是让子线程join以前,主线程休眠一段时间:
main_thread()
{
run_when_recieve_term_signal;
send_term_tasks_to_all_sub_threads;
sleep;
all_sub_threads_join;
}
我的理解不知道对不对,因为我也找不到相关的知识,但是结果如我所愿了。